[Amazon FSx for NetApp ONTAP] Access-based Enumeration (ABE) を設定して権限を持たないユーザーにファイルやフォルダを表示させないようにする
アクセス権限がないファイルやフォルダは表示させたくない
こんにちは、のんピ(@non____97)です。
皆さんはアクセス権限がないファイルやフォルダは表示させたくないと思ったことはありますか? 私はあります。
Amazon FSx for NetApp ONTAP(以降FSxN)ではデフォルトでSMBサーバー上のSMBファイル共有配下のファイルやフォルダは、ファイル共有に接続できれば誰でも一覧を表示することが可能です。
しかし、管理者としては余計なものは見せたくないですし、利用者からしても自分がアクセスできないものが表示されると混乱してしまいます。
そんな時に便利なのがAccess-based Enumeration(ABE, アクセスベースの列挙)です。こちらを使用することで、自分がアクセスすることが可能なファイルやフォルダのみを列挙して表示することが可能です。
ABEの詳細やAmazon FSx for Windows File Serverでの設定方法は以下記事をご覧ください。
FSxNでもABEを有効にすることが可能です。実際に試してみたので紹介します。
いきなりまとめ
- ファイル共有にAccess-based Enumeration (ABE) を設定することで、アクセス権限がないファイルやフォルダを表示させないようにすることが可能
- ファイル共有ごとに設定する
- SVM単位で指定することは不可
- ABEを有効化しても、ファイル共有自体は非表示にならない
- ファイルやフォルダに設定されたNTFS ACLに基づいて、表示/非表示が切り替わる
- デフォルトではABEは無効にされている
やってみた
検証環境
検証環境は以下のとおりです。
AD DCについては以下記事の検証で使用したものを流用します。
ドメインユーザーの準備
ドメインユーザーtest-user01とtest-user02を追加しました。どちらもFSxAdminGroup
というセキュリティグループに属させています。
AD DCに対してRDP接続できるようにローカルサーバーのRDP設定でFSxAdminGroup
を許可しています。
加えて、ローカルグループポリシーエディターを開いて、Computer Configureation
-Windows Settings
-Security Settings
-Local Policies
-User Rights Assignment
-Allow log on through Remote Desktop Services
でFSxAdminGroup
を許可しています。
ADをManaged MSADで管理しており、ドメインユーザーを別のEC2インスタンスにRDP接続をさせたい場合は以下re:Postが参考になると思います。
SMBサーバーとファイル共有の作成
マネジメントコンソールからSMBサーバーを作成し、ドメイン参加させます。
ONTAP CLIからドメイン参加しているSMBサーバーが立ち上がっていることを確認します。
::*> cifs server show
Server Status Domain/Workgroup Authentication
Vserver Name Admin Name Style
----------- --------------- --------- ---------------- --------------
svm SMB-SHARE up CORP domain
作成したSMBサーバー内にファイル共有を3つ作成します。
# ボリュームの作成
::*> volume create -vserver svm -volume vol_smb1 -aggregate aggr1 -state online -type RW -security-style ntfs -size 4GB -tiering-policy none -snapshot-policy none -junction-path /vol_smb1
[Job 99] Job succeeded: Successful
::*> volume create -vserver svm -volume vol_smb2 -aggregate aggr1 -state online -type RW -security-style ntfs -size 4GB -tiering-policy none -snapshot-policy none -junction-path /vol_smb2
[Job 101] Job succeeded: Successful
::*> volume create -vserver svm -volume vol_smb3 -aggregate aggr1 -state online -type RW -security-style ntfs -size 4GB -tiering-policy none -snapshot-policy none -junction-path /vol_smb3
[Job 103] Job succeeded: Successful
# ボリュームの確認
::*> volume show -volume vol_smb* -fields security-style, junction-pa
junction-path junction-path-source junction-parent
::*> volume show -volume vol_smb* -fields security-style, junction-path
vserver volume security-style junction-path
------- -------- -------------- -------------
svm vol_smb1 ntfs /vol_smb1
svm vol_smb2 ntfs /vol_smb2
svm vol_smb3 ntfs /vol_smb3
3 entries were displayed.
# ファイル共有の作成
::*> cifs share create -vserver svm -share-name share1 -path /vol_smb1
::*> cifs share create -vserver svm -share-name share2 -path /vol_smb2
::*> cifs share create -vserver svm -share-name share3 -path /vol_smb3
# ファイル共有が作成されたことを確認
::*> cifs share show
Vserver Share Path Properties Comment ACL
-------------- ------------- ----------------- ---------- -------- -----------
svm c$ / oplocks - BUILTIN\Administrators / Full Control
browsable
changenotify
show-previous-versions
svm ipc$ / browsable - -
svm share1 /vol_smb1 oplocks - Everyone / Full Control
browsable
changenotify
show-previous-versions
svm share2 /vol_smb2 oplocks - Everyone / Full Control
browsable
changenotify
show-previous-versions
svm share3 /vol_smb3 oplocks - Everyone / Full Control
browsable
changenotify
show-previous-versions
5 entries were displayed.
ファイル共有にアクセス権限がない場合、ファイル共有自体が表示されなくなるのか確認したいので、share2とshare3のACLを絞ります。
::*> cifs share access-control create -share share2 -user-or-group BUILTIN\Administrators -user-group-type windows -permission Full_Control
::*> cifs share access-control create -share share2 -user-or-group CORP\test-user01 -user-group-type windows -permission Full_Control
::*> cifs share access-control delete -share share2 -user-or-group Everyone
::*> cifs share access-control create -share share3 -user-or-group BUILTIN\Administrators -user-group-type windows -permission Full_Control
::*> cifs share access-control create -share share3 -user-or-group CORP\test-user02 -user-group-type windows -permission Full_Control
::*> cifs share access-control delete -share share3 -user-or-group Everyone
::*> cifs share show
Vserver Share Path Properties Comment ACL
-------------- ------------- ----------------- ---------- -------- -----------
svm c$ / oplocks - BUILTIN\Administrators / Full Control
browsable
changenotify
show-previous-versions
svm ipc$ / browsable - -
svm share1 /vol_smb1 oplocks - Everyone / Full Control
browsable
changenotify
show-previous-versions
svm share2 /vol_smb2 oplocks - BUILTIN\Administrators / Full Control
browsable CORP\test-user01 / Full Control
changenotify
show-previous-versions
svm share3 /vol_smb3 oplocks - BUILTIN\Administrators / Full Control
browsable CORP\test-user02 / Full Control
changenotify
show-previous-versions
5 entries were displayed.
アクセス権限がないSMBファイル共有一覧を表示できることを確認
アクセス権限がないSMBファイル共有一覧を表示できることを確認します。
- ドメインのAdministratorの場合
- test-user01の場合
- test-user02の場合
いずれも全てのファイル共有の一覧を表示できています。
ファイル共有のACLで許可されていないファイル共有にアクセスしようとすると、以下のように認証を求められます。
アクセス権限がないファイルやフォルダの一覧を表示できることを確認
アクセス権限がないファイルやフォルダの一覧を表示できることも確認します。
ファイルとフォルダを作成し、NTFS ACLを絞ってあげました。Administrator全てのファイルとフォルダ、それ以外のユーザーは対応したファイルとフォルダ以外に権限を付与していません。
> New-PSDrive -Name "Z" -PSProvider FileSystem -Root "\\SMB-SHARE\share1"
Name Used (GB) Free (GB) Provider Root CurrentLocation
---- --------- --------- -------- ---- ---------------
Z FileSystem \\SMB-SHARE\share1
> ls Z:\\
Directory: \\SMB-SHARE\share1
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 4/9/2024 4:14 AM administrator_dir
d----- 4/9/2024 4:15 AM test-user01_dir
d----- 4/9/2024 4:15 AM test-user02_dir
-a---- 4/9/2024 4:16 AM 0 administrator_txt.txt
-a---- 4/9/2024 4:16 AM 0 test-user01_txt.txt
-a---- 4/9/2024 4:16 AM 0 test-user02_txt.txt
> Get-ChildItem -Path "Z:\\" | ForEach-Object {
Get-Acl -Path $_.FullName | Format-Table -AutoSize -Wrap
}
Directory: \\SMB-SHARE\share1
Path Owner Access
---- ----- ------
administrator_dir BUILTIN\Administrators CORP\Administrator Allow FullControl
Directory: \\SMB-SHARE\share1
Path Owner Access
---- ----- ------
test-user01_dir BUILTIN\Administrators CORP\Administrator Allow FullControl
CORP\test-user01 Allow FullControl
Directory: \\SMB-SHARE\share1
Path Owner Access
---- ----- ------
test-user02_dir BUILTIN\Administrators CORP\Administrator Allow FullControl
CORP\test-user02 Allow FullControl
Directory: \\SMB-SHARE\share1
Path Owner Access
---- ----- ------
administrator_txt.txt BUILTIN\Administrators CORP\Administrator Allow FullControl
Directory: \\SMB-SHARE\share1
Path Owner Access
---- ----- ------
test-user01_txt.txt BUILTIN\Administrators CORP\Administrator Allow FullControl
CORP\test-user01 Allow FullControl
Directory: \\SMB-SHARE\share1
Path Owner Access
---- ----- ------
test-user02_txt.txt BUILTIN\Administrators CORP\Administrator Allow FullControl
CORP\test-user02 Allow FullControl
test-user01でRDP接続します。ファイル共有配下を確認すると、権限がないファイルやフォルダも一覧されています。
権限がないフォルダを開こうとすると、以下のようにアクセスできないと怒られました。
ABEの有効化
それではABEを有効化します。
ABEを有効化する際には、指定したファイル共有にaccess-based-enumeration
を設定します。
ファイル共有に設定できるプロパティの一覧は以下のとおりです。
共有プロパティ | 説明 |
---|---|
oplocks | 共有で便宜的ロックを使用することを指定します。これはクライアント側キャッシュとも呼ばれます。 |
browsable | Windows クライアントが共有を参照することを許可します。 |
showsnapshot | クライアントが Snapshot コピーを表示およびトラバースできることを指定します。 |
changenotify | 共有が変更通知要求をサポートすることを指定します。SVM 上の共有では、これはデフォルトの初期プロパティです。 |
attributecache | 属性にすばやくアクセスできるように SMB 共有でのファイル属性のキャッシュを有効にします。デフォルトでは、属性のキャッシュは無効になっています。このプロパティは、 SMB 1.0 経由で共有に接続するクライアントがある場合にのみ有効にしてください。クライアントが SMB 2.x または SMB 3.0 経由で共有に接続している場合、この共有プロパティは適用されません。 |
continuously-available | SMB クライアントが永続的な方法でファイルを開くことを許可します。この方法で開いたファイルは、フェイルオーバーやギブバックなど、システムを停止させるイベントから保護されます。 |
branchcache | 共有内のファイルに対する BranchCache ハッシュの要求をクライアントに許可します。このオプションが役立つのは、 CIFS の BranchCache 設定で動作モードとして「共有ごと」を指定した場合だけです。 |
access-based-enumeration | このプロパティは、この共有で _ アクセスベースの列挙 _ ( ABE )を有効にするように指定します。各ユーザのアクセス権に基づいて ABE フィルタを適用した共有フォルダがユーザに表示され、そのユーザがアクセス権を持たないフォルダやその他の共有リソースは表示されないようにします。 |
namespace-caching | このプロパティは、この共有に接続する SMB クライアントが、 CIFS サーバから返されたディレクトリの列挙結果をキャッシュできることを指定します。これにより、パフォーマンスが向上します。デフォルトでは、 SMB 1 のクライアントはディレクトリの列挙結果をキャッシュしません。SMB 2 および SMB 3 クライアントはデフォルトでディレクトリ列挙結果をキャッシュするため、この共有プロパティを指定してパフォーマンスが向上するのは SMB 1 クライアント接続のみです。 |
encrypt-data | この共有へのアクセス時に SMB 暗号化の使用を義務付けます。SMB データへのアクセスで暗号化をサポートしていない SMB クライアントは、この共有にアクセスできません。 |
抜粋 : SMB 共有プロパティの概要を使用する
実際にやってみます。
::*> cifs share properties show
Vserver Share Properties
---------------- ------------------------- -----------------------------
svm c$ oplocks
browsable
changenotify
show-previous-versions
svm ipc$ browsable
svm share1 oplocks
browsable
changenotify
show-previous-versions
svm share2 oplocks
browsable
changenotify
show-previous-versions
svm share3 oplocks
browsable
changenotify
show-previous-versions
5 entries were displayed.
::*> cifs share properties add -share-name share* -share-properties access-based-enumeration
3 entries were acted on.
::*> cifs share properties show
Vserver Share Properties
---------------- ------------------------- -----------------------------
svm c$ oplocks
browsable
changenotify
show-previous-versions
svm ipc$ browsable
svm share1 oplocks
browsable
changenotify
access-based-enumeration
show-previous-versions
svm share2 oplocks
browsable
changenotify
access-based-enumeration
show-previous-versions
svm share3 oplocks
browsable
changenotify
access-based-enumeration
show-previous-versions
5 entries were displayed.
作成した全てのファイル共有にaccess-based-enumeration
を設定しました。
アクセス権限がないSMBファイル共有の一覧を表示できなくなっているかを確認
アクセス権限がないSMBファイル共有一覧を表示できなくなっているかを確認します。
test-user01からSMBサーバーのファイル共有一覧を表示すると、アクセス権限がないshare3も表示されていました。
よくよく調べてみると、ABEを有効化してもファイル共有自体は非表示にならないようです。
- Access-Based EnumerationがCIFS共有で有効になっていると、共有フォルダまたはその下のファイルに(個人またはグループの権限制限により)アクセスする権限がないユーザの環境には、その共有リソースは表示されません。
- グローバルオプションは SVM 単位ではなく、共有ごとに ABE を有効にする必要があります
ABE では共有が非表示になることはなく、アクセス権限に基づいて作成されたフォルダやファイルだけが非表示になります。一時的に変更されます
- ローカル管理者には、引き続き無制限の列挙があります
- BUILTIN\Administrators グループのメンバーには、ローカルシステムへの無制限のアクセスが許可されます
- したがって、このグループのアカウントは、ディレクトリ全体を列挙できます
- デフォルトでは、ABEは無効です。
そのため、これは意図した動作です。
アクセス権限がないファイルやフォルダの一覧を表示できないことを確認
本命のアクセス権限がないファイルやフォルダの一覧を表示できないことを確認します。
test-user01からSMBサーバーのファイル共有share1配下にアクセスすると、アクセス権限がないファイルやフォルダは表示されないようになりました。
なお、全てのファイル、フォルダの権限を持つAdministratorは全てのファイル、フォルダの一覧を表示できました。
ABEが正常に動作していますね。
デフォルトで有効化しても良さそう
[Amazon FSx for NetApp ONTAP] Access-based Enumeration(ABE) を使用して権限を持たないユーザーにファイルやフォルダを表示させないようにしました。
特に有効にして困ることはないと思うので、デフォルトで有効化しても良さそうですね。
この記事が誰かの助けになれば幸いです。
以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!